/*
* Debug.as
*
* Copyright (C) 2011 - Dr.NP
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package bsp.utils
{
	import flash.utils.ByteArray;
	import flash.utils.Endian;
	
	public class Debug
	{
		public static function trace_hex(d : ByteArray) : String
		{
			var output : String = '';
			var ret : String = '';
			var curr : String;
			
			for (var i : int = 0; i < d.length; i ++)
			{
				curr = d[i].toString(16);
				
				if (curr.length < 2)
				{
					curr = '0' + curr;
				}
				
				if (i % 0x10 == 0)
				{
					ret += "\n";
				}
					
				else if (i % 0x8 == 0)
				{
					ret += '  ';
				}
				
				ret += ' ' + curr;
			}
			
			output = 'Trace binary data : (' + d.length + ') bytes' + ret;
			
			trace(output);
			
			return ret;
		}
		
		public static function dump_object(o : Object, indent : uint = 0) : void
		{
			for (var key : String in o)
			{
				var idt : String = "";
				for (var i : uint = 0; i < indent; i ++)
				{
					idt += "\t";
				}
				
				if (o[key] is String)
				{
					trace(idt + "[" + key + "] => " + o[key].toString());
				}
					
				else if (o[key] is Number)
				{
					trace(idt + "[" + key + "] => " + o[key].valueOf());
				}
					
				else if (o[key] is Object)
				{
					trace(idt + "[" + key + "] => Array");
					dump_object(o[key], indent + 1);
				}
					
				else
				{
					trace(idt + "[" + key + "] => Unknown data type");
				}
			}
			
			if (indent == 0)
			{
				trace("=============================================================");
			}
			
			return;
		}
	}
}
